package com.csap.framework.apidoc.web;

import com.csap.framework.annotation.ResponseAdvice;
import com.csap.framework.apidoc.model.CsapDocResponse;
import com.csap.framework.apidoc.service.CsapDocService;
import com.csap.framework.util.optional.Optional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author yangchengfu
 * @description doc文档接口
 * @dataTime 2020年-01月-02日 17:09:00
 **/
@RestController
@ResponseAdvice
public class CsapDocController {
    private CsapDocService csapDocService;
    /**
     * 缓存接口返回对象
     */
    private CsapDocResponse csapDocResponse;

    public CsapDocController(CsapDocService csapDocService) {
        this.csapDocService = csapDocService;
    }

    /**
     * api文档接口
     *
     * @param flush 是否刷新
     * @return
     */
    @GetMapping("csap/apidoc")
    public CsapDocResponse apidoc(@RequestParam(required = false, defaultValue = "false") Boolean flush) {
        return Optional.ofNullable(csapDocResponse)
                .when(i -> flush || csapDocResponse == null, i -> csapDocResponse = csapDocService.apidoc(null, Boolean.FALSE))
                .value(i -> csapDocResponse);
    }

    /**
     * api文档接口
     *
     * @param tableName 根据名获取接口
     * @return
     */
    @GetMapping("csap/apidoc/{tableName}")
    public CsapDocResponse apidocName(@PathVariable("tableName") String tableName, @RequestParam(required = false, defaultValue = "true") Boolean devTools) {
        return csapDocService.apidoc(tableName, devTools);
    }
}
